#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__

#include <pthread.h>

/*读取缓冲区时，总是从缓冲区的数据内存最前面读取数据，读取一条数据后，把剩余的数据移动到数据内存的最前面*/

/*小缓冲区，用来存储读写数据*/
typedef struct{
    /*缓冲区数据内存首地址*/
    unsigned char* ptr;
    /*总大小，我们指定小缓冲区的数据内存的大小*/
    int total_size;
    /*数据长度*/
    int len;
}SubBuffer;

typedef struct{
    SubBuffer* sub_buffers[2];
    int wirte_index;
    int read_index;
    pthread_mutex_t write_lock;
    pthread_mutex_t read_lock;
}Buffer;

/**
 * @brief 初始化缓冲区
 * 
 */
Buffer* app_buffer_Init(int total_size);

/**
 * @brief 释放缓冲区
 * 
 * @param arg 
 */
void app_buffer_Free(Buffer* buffer);

/**
 * @brief 向缓冲区中写入数据
 * 
 * @param buffer 待写入缓冲区
 * @param data 代写入的数据
 * @param len 数据长度
 * @return int 0：写入成功，-1：写入失败
 */
int app_buffer_writeBuffer(Buffer* buffer,char* data,int len);

/**
 * @brief 从缓冲区中读出数据
 * 
 * @param buffer 待读取的缓冲区
 * @param data_buf 数据缓冲区
 * @param len 缓冲区长度
 * @return int 读取到的数据长度，-1：读取失败
 */
int app_buffer_readBuffer(Buffer* buffer,char* data_buf,int len);

#endif
